package com.ruoyi.finance.protal.utils;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.finance.livestreaming.entity.SzOrder;
import com.ruoyi.finance.protal.shandpay.cashier.sdk.CertUtil;
import com.ruoyi.finance.protal.shandpay.cashier.sdk.DemoBase;
import com.ruoyi.finance.protal.shandpay.cashier.sdk.SDKConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;

@Slf4j
public class ShanDeCreateOrder {

    public static String orderCreate(SzOrder order) {
        try {
            // 接口报文规范中获取
            String reqAddr = "/qr/api/order/create";
            // 加载配置文件
            SDKConfig.getConfig().loadPropertiesFromSrc();
            // 加载证书
            CertUtil.init(SDKConfig.getConfig().getSandCertPath(), SDKConfig.getConfig().getSignCertPath(), SDKConfig.getConfig().getSignCertPwd());
            // 设置报文头
            JSONObject header = setHeader();
            // 设置报文体
            JSONObject body = setBody(order);

            JSONObject resp = DemoBase.requestServer(header, body, reqAddr);

            if (resp.getJSONObject("head").getString("respCode").equals("000000")) {
                log.info("生产二维码成功");
                log.info("生成的二维码信息为：" + resp.getJSONObject("body").getString("qrCode"));
            }

            // 生成二维码信息
            String text = resp.getJSONObject("body").getString("qrCode");
//            String logoPath ="C:\\Users\\css\\Pictures\\头像\\logo.png";
            String logoPath ="C:\\payment_code\\logo\\logo.png";
//            String destPath = "d:\\temp\\pic\\";
            String destPath = "C:\\payment_code\\";

            return QRCodeUtil.encode(text, logoPath, destPath, true);

        } catch (Exception e) {
            log.error("二维码创建失败");
            return "fail";
        }
    }

    public static JSONObject setHeader() {
        JSONObject header = new JSONObject();
        // 版本号
        header.put("version", DemoBase.version);
        // 接口名称:预下单
        header.put("method", DemoBase.QR_ORDERCREATE);
        // 产品编码
        header.put("productId", DemoBase.PRODUCTID_WXPAY);
        // 商户号
        header.put("mid", SDKConfig.getConfig().getMid());
        // 平台商户号
        String plMid = SDKConfig.getConfig().getPlMid();
        // 平台商户存在时接入
        if (plMid != null && StringUtils.isNotEmpty(plMid)) {
            // 接入类型设置为平台商户接入
            header.put("accessType", "2");
            header.put("plMid", plMid);
        } else {
            // 接入类型设置为普通商户接入
            header.put("accessType", "1");
        }
        // 渠道类型：07-互联网   08-移动端
        header.put("channelType", "07");
        // 请求时间
        header.put("reqTime", DemoBase.getCurrentTime());
        return header;
    }

    public static JSONObject setBody(SzOrder order) {
        JSONObject body = new JSONObject();
        // 支付工具: 0401-支付宝扫码
        body.put("payTool", "0401");
        // 商户订单号
        body.put("orderCode", order.getOrderId());
        //限定支付方式 送1-限定不能使用贷记卡	送4-限定不能使用花呗	送5-限定不能使用贷记卡+花呗
        //body.put("limitPay","5");
        // 订单金额 12位长度，精确到分
        body.put("totalAmount", "000000000001");
        // 订单标题
        body.put("subject", order.getOrderName());
        // 订单描述
        body.put("body", order.getOrderDescription());
        // 订单超时时间
        body.put("txnTimeOut", DemoBase.getNextDayTime());
        //限制扫码支付方式 ALIPAY-支付宝 CUPPAY-银联
        //body.put("payAccLimit","WXPAY");
        // 商户门店编号
        body.put("storeId", "");
        // 商户终端编号
        body.put("terminalId", "");
        // 操作员编号
        body.put("operatorId", "");
        // 异步通知地址
        body.put("notifyUrl", "http://dzcapp.cn/protal/notify");
        // 业务扩展参数
        body.put("bizExtendParams", "");
        // 商户扩展参数
        body.put("merchExtendParams", "");
        // 花呗分期标识
        body.put("hbFqFlag", "");
        // 花呗分期期数
        body.put("hbFqNum", "");
        // 卖家承担手续费比例
        body.put("hbFqSellerPercent", "");
        // 扩展域
        body.put("extend", "");
        //分账域 不分账请注释掉此行
        //body.put("accsplitInfo", "{\"accsplitMode\":\"3\"}");
        return body;
    }

}
